package com.sz.admin.ai.controller.test;

import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @描述: pdf文件读取
 * @Author: TangYuan
 * @Date: 2025/2/21 17:18
 */
@RequestMapping("demo/message")
@RestController
@AllArgsConstructor
public class Demo2Controller {
    
    // private final JdbcTemplate jdbcTemplate;
    //
    //
    // /**
    //  * PDF文件嵌入 ---> 存数据库
    //  * @param fileUrl 待嵌入的文件地址
    //  * @return 是否成功
    //  */
    // @SneakyThrows
    // @PostMapping("pdfEmbedding")
    // public Boolean pdfEmbedding(@RequestParam String fileUrl) {
    //
    //     // 从HTTP URL中读取文件
    //     URL url = URI.create(fileUrl).toURL();
    //     InputStream inputStream = url.openStream();
    //
    //     TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new InputStreamResource(inputStream));
    //     // 将文本内容划分成更小的块
    //     List<Document> splitDocuments = new TokenTextSplitter().apply(tikaDocumentReader.read());
    //     // 存入向量数据库，这个过程会自动调用embeddingModel,将文本变成向量再存入。
    //
    //     List<Document> splitDocumentList = new ArrayList<>();
    //     for (Document splitDocument : splitDocuments) {
    //
    //         Map<String, Object> metadata = splitDocument.getMetadata();
    //         metadata.put("userId", "8888888");
    //
    //         splitDocument = Document.builder()
    //                 .id(splitDocument.getId())
    //                 .text(splitDocument.getText())
    //                 .media(splitDocument.getMedia())
    //                 .metadata(metadata)
    //                 .score(splitDocument.getScore())
    //                 .build();
    //         splitDocumentList.add(splitDocument);
    //     }
    //
    //     OllamaOptions ollamaOptions = OllamaOptions.builder().model("nomic-embed-text:latest").build();
    //     OllamaApi ollamaApi = new OllamaApi("http://127.0.0.1:11434");
    //     OllamaEmbeddingModel embeddingModel = OllamaEmbeddingModel.builder().ollamaApi(ollamaApi).defaultOptions(ollamaOptions).build();
    //
    //     PgVectorStore build = PgVectorStore
    //             .builder(jdbcTemplate, embeddingModel)
    //             .build();
    //
    //
    //     build.add(splitDocumentList);
    //     return true;
    // }
    //
    // @GetMapping("/pdfDocumentSearch")
    // public List<Document> pdfDocumentSearch(@RequestParam String message) {
    //
    //     OllamaOptions ollamaOptions = OllamaOptions.builder().model("nomic-embed-text:latest").build();
    //     OllamaApi ollamaApi = new OllamaApi("http://127.0.0.1:11434");
    //     OllamaEmbeddingModel embeddingModel = OllamaEmbeddingModel.builder().ollamaApi(ollamaApi).defaultOptions(ollamaOptions).build();
    //
    //     PgVectorStore vectorStore = PgVectorStore
    //             .builder(jdbcTemplate, embeddingModel)
    //             .build();
    //
    //
    //     FilterExpressionBuilder filterExpressionBuilder = new FilterExpressionBuilder();
    //     Filter.Expression userId = filterExpressionBuilder.eq("userId", "88888888").build();
    //
    //     SearchRequest build = SearchRequest
    //             .builder()
    //             .query(message)
    //             .filterExpression(userId)
    //             .topK(5)
    //             .build();
    //
    //     System.out.println();
    //     System.out.println("              query: " + build.getQuery());
    //     System.out.println("               topK: " + build.getTopK());
    //     System.out.println("   filterExpression: " + build.getFilterExpression());
    //     System.out.println("similarityThreshold: " + build.getSimilarityThreshold());
    //
    //     List<Document> documentList = vectorStore.similaritySearch(build);
    //
    //
    //     System.out.println();
    //     if (documentList != null) {
    //         documentList.forEach(document -> {
    //             System.out.println(document.getId());
    //             System.out.println(document.getMetadata());
    //             System.out.println(document.getText());
    //             System.out.println(document.getMedia());
    //         });
    //     }
    //     return documentList;
    // }
}
